package com.yang.core.extension;

import java.lang.annotation.*;

/**
 * 扩展点注解
 * 用于标记RestClient的扩展点
 */
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExtensionPoint {

    /**
     * 扩展点名称
     */
    String name() default "";

    /**
     * 扩展点描述
     */
    String description() default "";

    /**
     * 扩展点优先级
     */
    int order() default 100;

    /**
     * 是否启用
     */
    boolean enabled() default true;

    /**
     * 扩展点分类
     */
    Category category() default Category.GENERAL;

    enum Category {
        /**
         * 通用扩展
         */
        GENERAL,

        /**
         * 认证扩展
         */
        AUTHENTICATION,

        /**
         * 序列化扩展
         */
        SERIALIZATION,

        /**
         * 监控扩展
         */
        MONITORING,

        /**
         * 缓存扩展
         */
        CACHE,

        /**
         * 重试扩展
         */
        RETRY,

        /**
         * 日志扩展
         */
        LOGGING,

        /**
         * 安全扩展
         */
        SECURITY,

        /**
         * 验证扩展
         */
        VALIDATION
    }
}